import { enc, mode, AES, pad } from 'crypto-js'

// 密钥与偏移量
const secretKey = 'SDFSDBXWQEKCKLDFSDKSNCLSKEPADASD'
const iv = '7D9SAFW8SD39SDWQ21M3N4XX0AD23HS'

/**
 * AES加密
 * @description 使用加密秘钥，对需要加密的参数进行加密
 * @param {string} words - 需要加密的参数
 * @param {string} keys - 加密密钥（长度必须是 16 的整数倍）
 * @param {string} offsets - 偏移量
 */
 export function encryptionParameters (words, keys = secretKey, offsets = iv) {
  // 未加密的参数
  const word = enc.Utf8.parse(words)
  // 密钥
  const key = enc.Utf8.parse(keys)
  // 偏移量
  const offset = enc.Utf8.parse(offsets)

  const encrypted = AES.encrypt(word, key, {
    iv: offset,
    mode: mode.CBC,
    padding: pad.Pkcs7
  })
  return encrypted.toString()
}

/**
 * AES解密
 * @description 使用加密秘钥，对 需要解密的参数 进行解密
 * @param {string} encryptedWords - 需要解密的参数
 * @param {string} keys - 加密密钥（长度必须是 16 的整数倍）
 * @param {string} offsets - 偏移量
 */
 export function decryptionParameters (encryptedWords, keys = secretKey, offsets = iv) {
  // 密钥
  const key = enc.Utf8.parse(keys)
  // 偏移量
  const offset = enc.Utf8.parse(offsets)
  const bytes = AES.decrypt(encryptedWords, key, {
    iv: offset,
    mode: mode.CBC,
    padding: pad.Pkcs7
  })
  return bytes.toString(enc.Utf8)
}
